/**
  * @description: 数组处理函数工具类
  * @author: lxz
  * @update: lxz(2021-01-18)
  */

/**
  * 排序数组，根据 sortArr 进行排序
  * @param {array} sortArr          参照的排序数组(['福田区', '罗湖区', '南山区'])
  * @param {array} needSortArr      需要排序的数组([{name: '罗湖'}, {name: '福田'}])
  * @param {string} sortKey         需要排序的字段（name）
  * @param {function=} filterFun    过滤方法（可传）
  * @return {array}                 排序后的数组([{name: '福田'}, {name: '罗湖'}])
  */
export function arraySort(sortArr, needSortArr, sortKey, filterFun) {
  let val
  const mapData = new Map()
  if (!needSortArr) return
  needSortArr.forEach(v => {
    mapData.set(v[sortKey], v)
  })
  return sortArr.reduce((arr, v) => {
    val = mapData.get(v)
    if (val) {
      if ((filterFun && filterFun(val)) || !filterFun) {
        arr.push(val)
      }
    }
    return arr
  }, [])
}
